#include <iostream>
#include <fstream>
#include "combo.h"
#include "tipos.h"

using namespace std;

Combo :: Combo(){
_bebida = PestiCola;
_sandwich = McPato;
_dificultad = 10;
}

Combo :: Combo(const Bebida b, const Hamburguesa h, const Energia d){
	_bebida = b;
	_sandwich = h;
	_dificultad = d;
}

Bebida Combo :: bebidaC() const{
	return _bebida;
}

Hamburguesa Combo :: sandwichC() const{
	return _sandwich;
}

Energia Combo :: dificultadC() const{
	return _dificultad;
}

void Combo :: mostrar(std::ostream& os) const{
	os << "(" << _bebida << ", " << _sandwich << ", " << _dificultad << ")";
}

void Combo :: guardar(std::ostream& os) const{
	os << "C |" << _bebida << "| |"<< _sandwich << "| |" << _dificultad << "|";
}

void Combo :: cargar (std::istream& is){
	char p;
	string bebida;
	string hamburguesa;
	int dificultad;
	is >> p;
	is >> p;
	getline(is,bebida,'|');
	is >> p;
	getline(is,hamburguesa,'|');
	is >> p;
	is >> dificultad;
	is >> p;
	Hamburguesa ham = stringAComida(hamburguesa);
	Bebida beb = stringABebida(bebida);


	_sandwich = ham;
	_bebida = beb;
	_dificultad = dificultad;

}

Hamburguesa Combo :: stringAComida(string h){
	Hamburguesa ham;
	if(h=="McGyver"){
		ham = McGyver;
	}else if(h=="CukiQueFresco"){
		ham = CukiQueFresco;
	}else if(h=="McPato"){
		ham = McPato;
	}else if(h=="BigMacabra"){
		ham = BigMacabra;
	}

	return ham;
}

Bebida Combo :: stringABebida(string b){
	Bebida beb;
	if(b=="PestiCola"){
		beb = PestiCola;
	}else if(b=="FalsaNaranja"){
		beb = FalsaNaranja;
	}else if(b=="SeVeNada"){
		beb = SeVeNada;
	}else if(b=="AguaConGags"){
		beb = AguaConGags;
	}else if(b=="AguaSinGags"){
		beb = AguaSinGags;
	}

	return beb;
}

bool Combo :: operator==(const Combo& otroCombo) const{
	return (_sandwich == otroCombo._sandwich) && (_bebida == otroCombo._bebida);
}

std::ostream & operator<<(std::ostream & os,const Combo & c){
	c.mostrar(os);
	return os;
}

std::ostream &  operator<<(std::ostream & os,const Bebida & b){
	if(b==PestiCola){
		os << "PestiCola";
	}else if(b==FalsaNaranja){
		os << "FalsaNaranja";
	}else if(b==SeVeNada){
		os << "SeVeNada";
	}else if(b==AguaConGags){
		os << "AguaConGags";
	}else if(b==AguaSinGags){
		os << "AguaSinGags";
	}

	return os;
}

std::ostream & operator<<(std::ostream & os,const Hamburguesa & h){
	if(h==McGyver){
		os << "McGyver";
	}else if(h==CukiQueFresco){
		os << "CukiQueFresco";
	}else if(h==McPato){
		os << "McPato";
	}else if(h==BigMacabra){
		os << "BigMacabra";
	}

	return os;
}

